home *** CD-ROM | disk | FTP | other *** search
/ Giga Games 1 / Giga Games.iso / net / usenet / volume11 / blckbstr / patch1 < prev   
Encoding:
Internet Message Format  |  1991-01-03  |  33.6 KB

  1. Path: uunet!zephyr.ens.tek.com!tekred!saab!billr
  2. From: billr@saab.CNA.TEK.COM (Bill Randle)
  3. Newsgroups: comp.sources.games
  4. Subject: v11i095:  blockbuster - clear the bricks games (SunView only), Patch1
  5. Message-ID: <6726@tekred.CNA.TEK.COM>
  6. Date: 18 Dec 90 19:01:47 GMT
  7. Sender: news@tekred.CNA.TEK.COM
  8. Lines: 1041
  9. Approved: billr@saab.CNA.TEK.COM
  10.  
  11. Submitted-by: Eric Van Gestel <ericvg%BLEKUL60.BITNET@cunyvm.cuny.edu>
  12. Posting-number: Volume 11, Issue 95
  13. Archive-name: blockbuster/Patch1
  14. Patch-To: blockbuster: Volume 11, Issue 18-20
  15. Environment: SunView
  16.  
  17.  
  18. #! /bin/sh
  19. # This is a shell archive.  Remove anything before this line, then unpack
  20. # it by saving it into a file and typing "sh file".  To overwrite existing
  21. # files, type "sh file -c".  You can also feed this as standard input via
  22. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  23. # will see the following message at the end:
  24. #        "End of shell archive."
  25. # Contents:  README.PCH1 patches01
  26. # Wrapped by billr@saab on Tue Dec 18 10:58:46 1990
  27. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  28. if test -f 'README.PCH1' -a "${1}" != "-c" ; then 
  29.   echo shar: Will not clobber existing file \"'README.PCH1'\"
  30. else
  31. echo shar: Extracting \"'README.PCH1'\" \(1094 characters\)
  32. sed "s/^X//" >'README.PCH1' <<'END_OF_FILE'
  33. XBlockbuster patch1 is largely cosmetic; it takes care of the following:
  34. X
  35. X1. Allows for 10 digit scores in stead of the current 7.
  36. X   [Smm overflows on the maximum score for Leprechaun (wacko). Although, to
  37. X    date, no one has actually done this, >7 digit scores have been reported.]
  38. X
  39. X2. Fixes get_playground such that it will accept sunview options if the
  40. X   playground argument is missing, and puts it where it belongs (before main).
  41. X
  42. X3. Cleans up a number of comments rather badly maulded by the reformatter.
  43. X
  44. X4. Makes the code portable to ANSI C (thanks hugh@csri.toronto.edu).
  45. X
  46. X5. The first few stages are a bit faster
  47. X   [the speed you would have got to after 5 stages];
  48. X   while retaining the full effect of Pause blocks (unchanged minimum speed).
  49. X   Now this still isn't very fast, but reserve your judgment until you've been
  50. X   round all stages once or twice and start building up a reasonable score.
  51. X
  52. XOf course, with get_playground added by billr, there is no longer any need
  53. Xfor the shell script blockbuster.SKEL; so you may delete it.
  54. X
  55. X-- Eric Van Gestel (ericvg@cs.kuleuven.ac.be)
  56. END_OF_FILE
  57. if test 1094 -ne `wc -c <'README.PCH1'`; then
  58.     echo shar: \"'README.PCH1'\" unpacked with wrong size!
  59. fi
  60. # end of 'README.PCH1'
  61. fi
  62. if test -f 'patches01' -a "${1}" != "-c" ; then 
  63.   echo shar: Will not clobber existing file \"'patches01'\"
  64. else
  65. echo shar: Extracting \"'patches01'\" \(30506 characters\)
  66. sed "s/^X//" >'patches01' <<'END_OF_FILE'
  67. X*** RATIONAL.orig    Thu Aug 23 14:56:10 1990
  68. X--- RATIONAL    Thu Aug 23 14:56:33 1990
  69. X***************
  70. X*** 7,9 ****
  71. X  They can be modified easily, but as this makes it harder to compare scores,
  72. X! you should provide a separate play ground.
  73. X
  74. X--- 7,9 ----
  75. X  They can be modified easily, but as this makes it harder to compare scores,
  76. X! you should provide a separate playground.
  77. X
  78. X***************
  79. X*** 11,14 ****
  80. X  - blockbuster
  81. X!     Executable for whatever host your on.
  82. X!     (must be executed from within a play ground directory)
  83. X  - sun3.50 & sun4
  84. X--- 11,13 ----
  85. X  - blockbuster
  86. X!     Executable for whatever host you're on.
  87. X  - sun3.50 & sun4
  88. X***************
  89. X*** 16,18 ****
  90. X      (no crosscompilation though, you must be on a sun3.50 or sun4
  91. X!         respectively)
  92. X  - stagemm
  93. X--- 15,17 ----
  94. X      (no crosscompilation though, you must be on a sun3.50 or sun4
  95. X!      respectively)
  96. X  - stagemm
  97. X***************
  98. X*** 22,25 ****
  99. X  (You may wish to adjust, rename and put these in your path.)
  100. X- - blockbuster.SKEL
  101. X-     Main program (architecture, and directory independent)
  102. X  - smm.SKEL
  103. X--- 21,22 ----
  104. X*** README.orig    Thu Aug 23 14:56:11 1990
  105. X--- README    Thu Aug 23 14:56:34 1990
  106. X***************
  107. X*** 20,22 ****
  108. X  added by Bill Randle (billr@saab.CNA.TEK.COM) 9 August 1990.
  109. X! [The man page described the "play_ground" option, but it wasn't
  110. X  implemented in the code until now.]
  111. X--- 20,22 ----
  112. X  added by Bill Randle (billr@saab.CNA.TEK.COM) 9 August 1990.
  113. X! [The man page described the "playground" option, but it wasn't
  114. X  implemented in the code until now.]
  115. X*** balls_pallet.c.orig    Thu Aug 23 14:56:12 1990
  116. X--- balls_pallet.c    Thu Aug 23 14:56:36 1990
  117. X***************
  118. X*** 28,33 ****
  119. X
  120. X! #define draw_ball( ball )      \
  121. X!     /* struct Ball *ball */    \
  122. X!     pw_rop( stage_win, (int)( (ball)->x ) - 8, (int)( (ball)->y ) - 8, 16, 16, \
  123. X!             PIX_XOR, &ball_pr, 0, 0 )
  124. X
  125. X--- 28,33 ----
  126. X
  127. X! #define draw_ball( ball ) \
  128. X!     /* struct Ball *ball */ \
  129. X!     pw_rop( stage_win, (int)( (ball)->x ) - 8, (int)( (ball)->y ) - 8, \
  130. X!         16, 16, PIX_XOR, &ball_pr, 0, 0 )
  131. X
  132. X***************
  133. X*** 56,75 ****
  134. X             PIX_XOR, 1 );
  135. X!     pw_vector( stage_win, 0, mouse_yI - 1,    /* <HC> */
  136. X!            10, mouse_yI - 1,    /* <HC> */
  137. X!            PIX_XOR, 1 );/* <HC> */
  138. X!     pw_vector( stage_win, 0, mouse_yI,
  139. X!            10, mouse_yI,/* <HC> */
  140. X!            PIX_XOR, 1 );/* <HC> */
  141. X!     pw_vector( stage_win, 0, mouse_yI + 1,    /* <HC> */
  142. X!            10, mouse_yI + 1,    /* <HC> */
  143. X!            PIX_XOR, 1 );/* <HC> */
  144. X!     pw_vector( stage_win, STAGE_WIDTH_IN_PIXELS - 1, mouse_yI - 1,    /* <HC> */
  145. X!            STAGE_WIDTH_IN_PIXELS - 11, mouse_yI - 1,    /* <HC> */
  146. X!            PIX_XOR, 1 );/* <HC> */
  147. X!     pw_vector( stage_win, STAGE_WIDTH_IN_PIXELS - 1, mouse_yI,
  148. X!            STAGE_WIDTH_IN_PIXELS - 11, mouse_yI,    /* <HC> */
  149. X!            PIX_XOR, 1 );/* <HC> */
  150. X!     pw_vector( stage_win, STAGE_WIDTH_IN_PIXELS - 1, mouse_yI + 1,    /* <HC> */
  151. X!            STAGE_WIDTH_IN_PIXELS - 11, mouse_yI + 1,    /* <HC> */
  152. X!            PIX_XOR, 1 );/* <HC> */
  153. X  }
  154. X--- 56,75 ----
  155. X             PIX_XOR, 1 );
  156. X!     pw_vector( stage_win, 0, mouse_yI - 1,                /*<HC>*/
  157. X!            10, mouse_yI - 1,                    /*<HC>*/
  158. X!            PIX_XOR, 1 );                    /*<HC>*/
  159. X!     pw_vector( stage_win, 0, mouse_yI,                /*<HC>*/
  160. X!            10, mouse_yI,                    /*<HC>*/
  161. X!            PIX_XOR, 1 );                    /*<HC>*/
  162. X!     pw_vector( stage_win, 0, mouse_yI + 1,                /*<HC>*/
  163. X!            10, mouse_yI + 1,                    /*<HC>*/
  164. X!            PIX_XOR, 1 );                    /*<HC>*/
  165. X!     pw_vector( stage_win, STAGE_WIDTH_IN_PIXELS - 1, mouse_yI - 1,    /*<HC>*/
  166. X!            STAGE_WIDTH_IN_PIXELS - 11, mouse_yI - 1,        /*<HC>*/
  167. X!            PIX_XOR, 1 );                    /*<HC>*/
  168. X!     pw_vector( stage_win, STAGE_WIDTH_IN_PIXELS - 1, mouse_yI,    /*<HC>*/
  169. X!            STAGE_WIDTH_IN_PIXELS - 11, mouse_yI,        /*<HC>*/
  170. X!            PIX_XOR, 1 );                    /*<HC>*/
  171. X!     pw_vector( stage_win, STAGE_WIDTH_IN_PIXELS - 1, mouse_yI + 1,    /*<HC>*/
  172. X!            STAGE_WIDTH_IN_PIXELS - 11, mouse_yI + 1,        /*<HC>*/
  173. X!            PIX_XOR, 1 );                    /*<HC>*/
  174. X  }
  175. X***************
  176. X*** 133,135 ****
  177. X          ball->speed = launch_speed;
  178. X!         ball->x_speed = launch_speed * ( ( ball->quadrant == NE ) ? M_SQRT2_2
  179. X                            /* NW */ : -M_SQRT2_2 );
  180. X--- 133,136 ----
  181. X          ball->speed = launch_speed;
  182. X!         ball->x_speed = launch_speed *
  183. X!                 ( ( ball->quadrant == NE ) ? M_SQRT2_2
  184. X                            /* NW */ : -M_SQRT2_2 );
  185. X***************
  186. X*** 195,200 ****
  187. X          if ( !( ++loop_nhits % LOOP_MAX ) )
  188. X!             ball->x -=
  189. X!                 ball->x_speed * ( double ) ( loop_nhits / LOOP_MAX ) + 1;
  190. X          /* horizontal shift, trying to get out of a bounce loop */
  191. X!         /* negative to try to avoid leaving the stage */
  192. X          break;
  193. X--- 196,200 ----
  194. X          if ( !( ++loop_nhits % LOOP_MAX ) )
  195. X!             ball->x -= ball->x_speed * ( double ) ( loop_nhits / LOOP_MAX ) + 1;
  196. X          /* horizontal shift, trying to get out of a bounce loop */
  197. X!         /* negative to avoid leaving the stage at the side */
  198. X          break;
  199. X***************
  200. X*** 265,268 ****
  201. X              ball->y_speed *= pause;
  202. X          }
  203. X-         /* approximative; will be corrected on next pallet deflection */
  204. X          show_speeds(  );
  205. X--- 265,271 ----
  206. X              ball->y_speed *= pause;
  207. X+             /*
  208. X+              * approximative; will be corrected on next pallet
  209. X+              * deflection
  210. X+              */
  211. X          }
  212. X          show_speeds(  );
  213. X***************
  214. X*** 305,307 ****
  215. X          if ( ++( brick->nhits ) == 8 ) {
  216. X!             launch_speed -= ( launch_speed - INIT_SPEED ) * 0.3;
  217. X              busted = TRUE;
  218. X--- 308,310 ----
  219. X          if ( ++( brick->nhits ) == 8 ) {
  220. X!             launch_speed -= ( launch_speed - MIN_SPEED ) * 0.3;
  221. X              busted = TRUE;
  222. X***************
  223. X*** 320,327 ****
  224. X               * note no check for NEAR_HORIZONTAL and none needed
  225. X!              * since,
  226. X               */
  227. X-             /*
  228. X-              * if it gets too horizontal, it probably will hit it
  229. X-              * again.
  230. X-              */
  231. X          }
  232. X--- 323,327 ----
  233. X               * note no check for NEAR_HORIZONTAL and none needed
  234. X!              * since, if it gets too horizontal, it probably will
  235. X!              * hit it again.
  236. X               */
  237. X          }
  238. X***************
  239. X*** 332,336 ****
  240. X              ball->x_speed += ( ball->x_speed < 0 ) ? -SPEED_INCR_2
  241. X!                 : SPEED_INCR_2;
  242. X              ball->y_speed += ( ball->y_speed < 0 ) ? -SPEED_INCR_2
  243. X!                 : SPEED_INCR_2;
  244. X              /*
  245. X--- 332,336 ----
  246. X              ball->x_speed += ( ball->x_speed < 0 ) ? -SPEED_INCR_2
  247. X!                                    : SPEED_INCR_2;
  248. X              ball->y_speed += ( ball->y_speed < 0 ) ? -SPEED_INCR_2
  249. X!                                    : SPEED_INCR_2;
  250. X              /*
  251. X***************
  252. X*** 349,351 ****
  253. X          break;
  254. X!     case 'U': /* undo */ ;
  255. X          /* effective only after something has been busted */
  256. X--- 349,351 ----
  257. X          break;
  258. X!     case 'U':        /* undo */ ;
  259. X          /* effective only after something has been busted */
  260. X***************
  261. X*** 360,366 ****
  262. X          break;
  263. X!     case 'W': /* open window */ ;
  264. X          brick->code = '%';
  265. X!          /* redraw = TRUE */ draw_brick( ball->row, ball->col );
  266. X          return ( score_hit );    /* no deflection */
  267. X!     case '%': /* closed window */ ;
  268. X          brick->code = 'W';
  269. X--- 360,366 ----
  270. X          break;
  271. X!     case 'W':        /* open window */ ;
  272. X          brick->code = '%';
  273. X!         /* redraw = TRUE; */ draw_brick( ball->row, ball->col );
  274. X          return ( score_hit );    /* no deflection */
  275. X!     case '%':        /* closed window */ ;
  276. X          brick->code = 'W';
  277. X***************
  278. X*** 576,578 ****
  279. X          for ( tmp = 0; tmp < MSG_HEIGHT; tmp++ )
  280. X!             pw_vector( msg_win, 0, tmp, STAGE_WIDTH_IN_PIXELS - 1, tmp,
  281. X                     PIX_CLR, 1 );
  282. X--- 576,579 ----
  283. X          for ( tmp = 0; tmp < MSG_HEIGHT; tmp++ )
  284. X!             pw_vector( msg_win, 0, tmp,
  285. X!                    STAGE_WIDTH_IN_PIXELS - 1, tmp,
  286. X                     PIX_CLR, 1 );
  287. X***************
  288. X*** 584,586 ****
  289. X          /* lets go ! */
  290. X!         move_balls(  );    /* starts the timer */
  291. X          break;
  292. X--- 585,587 ----
  293. X          /* lets go ! */
  294. X!          move_balls( ( Frame ) NULL, 0 );    /* starts the timer */
  295. X          break;
  296. X***************
  297. X*** 596,598 ****
  298. X          pallet_x = ( double ) ( pallet_xI = event_x( event ) );
  299. X!         mouse_yI = event_y( event );    /* <HC> */
  300. X      }
  301. X--- 597,599 ----
  302. X          pallet_x = ( double ) ( pallet_xI = event_x( event ) );
  303. X!         mouse_yI = event_y( event );                /*<HC>*/
  304. X      }
  305. X*** blockbuster.c.orig    Thu Aug 23 14:56:13 1990
  306. X--- blockbuster.c    Thu Aug 23 14:56:39 1990
  307. X***************
  308. X*** 27,29 ****
  309. X
  310. X! DEFINE_ICON_FROM_IMAGE( blockbuster_icon, blockbuster_icon_image );
  311. X
  312. X--- 27,29 ----
  313. X
  314. X! DEFINE_ICON_FROM_IMAGE( blockbuster_icon, blockbuster_icon_image )
  315. X
  316. X***************
  317. X*** 30,32 ****
  318. X--- 30,65 ----
  319. X
  320. X+ /*** [ANSI] define globals (declared external in blockbuster.h) ***/
  321. X+ Frame           frame;
  322. X+ Canvas          stage_cvs, msg_cvs;
  323. X+ Pixwin         *stage_win, *msg_win;
  324. X+ Pixfont        *font;
  325. X+ char            msg0_buf[55];
  326. X+ struct Brick    stage[MAX_ROW + 1][MAX_COL + 1];
  327. X+ struct Ball     ball1, ball2, ball3;
  328. X+ int             launch_quadrant;    /* enumeration { NE, NW } */
  329. X+ int             launch_row, launch_col;
  330. X+ double          launch_x, launch_y;
  331. X+ int             emit_row, emit_col;
  332. X+ int             pallet_lengthI;    /* range MIN_PALLET_LENGTH..MAX_PALLET_LENGTH */
  333. X+ int             pallet_heightI;    /* range pallet_lengthI..MAX_PALLET_HEIGHT */
  334. X+ int             pallet_xI;    /* range 0..STAGE_WIDTH_IN_PIXELS */
  335. X+ int             pallet_yI;    /* range PALLET_MAX_Y+4..PALLET_MIN_Y-12 */
  336. X+ int             pallet_row;    /* range MAX_ROW-1..MAX_ROW-9 */
  337. X+ double          pallet_length, pallet_height, pallet_x, pallet_y;
  338. X+ int             mouse_yI;    /* range 0..STAGE_HEIGHT_IN_PIXELS */    /*<HC>*/
  339. X+ int             nb_stages, stage_nb, balls_left, score, score_incr, nbricks,
  340. X+         loop_nhits, pallet_modif;
  341. X+ double          launch_speed;
  342. X+ char            stage_name[NAME_LENGTH];
  343. X+ int             stages[MAX_NB_STAGES];
  344. X+ struct Brick   *last_busted_brick;    /* NULL == none so far */
  345. X+ char            last_busted_code;
  346. X+ int             last_busted_row, last_busted_col;
  347. X+ struct itimerval timeout;
  348. X+ char           *login;
  349. X+ char            playground[PATH_LENGTH];
  350. X+
  351. X+
  352. X  /*** signal handling ***/
  353. X+ void
  354. X  catch( sig )
  355. X***************
  356. X*** 87,88 ****
  357. X--- 120,181 ----
  358. X
  359. X+ /*** pathname of playground; anonymous, named or private ***/
  360. X+ void
  361. X+ get_playground( argc, argv )
  362. X+     int             argc;
  363. X+     char           *argv[];
  364. X+ {
  365. X+     DIR            *dirp;
  366. X+     struct direct  *dp;
  367. X+     struct stat     st;
  368. X+     int             len, found = FALSE;
  369. X+
  370. X+     /* set default playground directory */
  371. X+     strcpy( playground, STAGEDIR );
  372. X+     strcat( playground, "/STAGES" );
  373. X+     /* check for additional arguments (specific playground) */
  374. X+     if ( argc > 1 ) {
  375. X+         len = strlen( argv[1] );
  376. X+         if ( argv[1][0] == '-' ) {
  377. X+             if ( len > 1 ) {
  378. X+                 /* sunview_options only */
  379. X+                 return;
  380. X+             }
  381. X+             /* list available playgrounds */
  382. X+             printf( "available playgrounds are:\n" );
  383. X+             printf( "\tdefault\n" );
  384. X+             dirp = opendir( STAGEDIR );
  385. X+             for( dp = readdir( dirp ); dp != NULL;
  386. X+                  dp = readdir( dirp ) ) {
  387. X+                 if ( !strncmp( dp->d_name, "STAGES.", 7 ) )
  388. X+                     printf( "\t%s\n", ( dp->d_name ) + 7 );
  389. X+             }
  390. X+             closedir( dirp );
  391. X+             exit( 0 );
  392. X+         }
  393. X+         /* it's a playground name or private directory */
  394. X+         if( !strcmp( argv[1], "default" ) ) {
  395. X+             /* just in case someone used default */
  396. X+             return;
  397. X+         }
  398. X+         dirp = opendir( STAGEDIR );
  399. X+         for( dp = readdir( dirp ); dp != NULL; dp = readdir( dirp ) ) {
  400. X+             if ( dp->d_namlen == len + 7 &&
  401. X+                  !strcmp( ( dp->d_name ) + 7, argv[1] ) ) {
  402. X+                 strcat( playground, ( dp->d_name ) + 6 );
  403. X+                 return;
  404. X+             }
  405. X+         }
  406. X+         closedir( dirp );
  407. X+         /* it's a private directory */
  408. X+         strcpy( playground, argv[1] );
  409. X+         stat( playground, &st );
  410. X+         if( !(st.st_mode & S_IFDIR) ) {
  411. X+             printf( "private playground <%s> not a directory.\n",
  412. X+                 playground );
  413. X+             exit( 1 );
  414. X+         }
  415. X+     }
  416. X+ }
  417. X+
  418. X+
  419. X  /*** blockbuster ***/
  420. X***************
  421. X*** 94,97 ****
  422. X      Cursor          cursor;
  423. X-     FILE           *fd;
  424. X-     int             crosshairs = FALSE;
  425. X
  426. X--- 187,188 ----
  427. X***************
  428. X*** 138,145 ****
  429. X              CURSOR_SHOW_CURSOR, FALSE,
  430. X!     /*
  431. X!      * CURSOR_SHOW_HORIZ_HAIR, TRUE, CURSOR_HORIZ_HAIR_LENGTH, 12,
  432. X!      * CURSOR_HORIZ_HAIR_THICKNESS, 3, CURSOR_HORIZ_HAIR_BORDER_GRAVITY,
  433. X!      * TRUE, ** for some reason this won't work *** ** WORKAROUND: q.v.
  434. X!      * balls_pallet.c **
  435. X!      *//* <HC> */
  436. X              0 );
  437. X--- 229,236 ----
  438. X              CURSOR_SHOW_CURSOR, FALSE,
  439. X!          /**CURSOR_SHOW_HORIZ_HAIR, TRUE,
  440. X!           **CURSOR_HORIZ_HAIR_LENGTH, 12,
  441. X!           **CURSOR_HORIZ_HAIR_THICKNESS, 3,
  442. X!           **CURSOR_HORIZ_HAIR_BORDER_GRAVITY, TRUE,
  443. X!           *** for some reason this won't work ***
  444. X!           *** WORKAROUND <HC>: q.v. balls_pallet.c ***/
  445. X              0 );
  446. X***************
  447. X*** 165,226 ****
  448. X      exit( 0 );
  449. X- }
  450. X-
  451. X- get_playground( argc, argv )
  452. X- int argc;
  453. X- char *argv[];
  454. X- {
  455. X-     DIR        *dirp;
  456. X-     struct direct    *dp;
  457. X-     struct stat    st;
  458. X-     int        len, found;
  459. X-
  460. X-     /* set default playground directory */
  461. X-     strcpy( playground, STAGEDIR );
  462. X-     strcat( playground, "/" );
  463. X-     /* check for additional arguments (specific playground) */
  464. X-     if ( argc > 1 ) {
  465. X-         if ( argv[1][0] == '-' ) {
  466. X-             /* list available playgrounds */
  467. X-             printf( "available playgrounds are:\n" );
  468. X-             printf( "\tdefault\n" );
  469. X-             dirp = opendir(STAGEDIR);
  470. X-             for( dp=readdir( dirp ); dp!=NULL; dp=readdir( dirp ) ) {
  471. X-                 if ( !strncmp( dp->d_name, "STAGES.", 7 ) )
  472. X-                     printf( "\t%s\n", (dp->d_name)+7 );
  473. X-             }
  474. X-             closedir( dirp );
  475. X-             exit( 0 );
  476. X-         }
  477. X-         /* it's a playground name or private directory */
  478. X-         if( !strcmp( argv[1], "default" ) ) {
  479. X-             /* just in case someone used default */
  480. X-             strcat( playground, "STAGES" );
  481. X-             return;
  482. X-         }
  483. X-         found = 0;
  484. X-         len = strlen( argv[1] );
  485. X-         dirp = opendir( STAGEDIR );
  486. X-         for( dp=readdir( dirp ); dp!=NULL; dp=readdir( dirp ) ) {
  487. X-             if ( dp->d_namlen == len+7 &&
  488. X-                  !strcmp( (dp->d_name)+7, argv[1] ) ) {
  489. X-                 found++;
  490. X-                 break;
  491. X-             }
  492. X-         }
  493. X-         closedir( dirp );
  494. X-         if ( found )
  495. X-             strcat( playground, dp->d_name );
  496. X-         else {
  497. X-             /* private dir */
  498. X-             strcpy( playground, argv[1] );
  499. X-             stat( playground, &st );
  500. X-             if( !(st.st_mode & S_IFDIR) ) {
  501. X-                 printf( "private playground <%s> not a directory.\n",
  502. X-                     playground );
  503. X-                 exit( 1 );
  504. X-             }
  505. X-         }
  506. X-     } else {
  507. X-         strcat( playground, "STAGES" );
  508. X-     }
  509. X  }
  510. X--- 256,257 ----
  511. X*** blockbuster.h.orig    Thu Aug 23 14:56:15 1990
  512. X--- blockbuster.h    Thu Aug 23 15:22:25 1990
  513. X***************
  514. X*** 7,9 ****
  515. X   * Compilation:
  516. X!  *     -lsuntool -lsunwindow -lpixrect
  517. X   */
  518. X--- 7,9 ----
  519. X   * Compilation:
  520. X!  *     -lsuntool -lsunwindow -lpixrect -lm
  521. X   */
  522. X***************
  523. X*** 13,14 ****
  524. X--- 13,15 ----
  525. X  #include <stdio.h>
  526. X+ #include <string.h>
  527. X  #include <pwd.h>
  528. X***************
  529. X*** 21,23 ****
  530. X  /*
  531. X!  * #define M_PI                3.14159265358979323846
  532. X   * #define M_PI_2      1.57079632679489661923
  533. X--- 22,24 ----
  534. X  /*
  535. X!  * #define M_PI        3.14159265358979323846
  536. X   * #define M_PI_2      1.57079632679489661923
  537. X***************
  538. X*** 35,38 ****
  539. X
  540. X! #define MAX_ROW                42
  541. X! #define MAX_COL                11
  542. X
  543. X--- 36,39 ----
  544. X
  545. X! #define MAX_ROW        42
  546. X! #define MAX_COL        11
  547. X
  548. X***************
  549. X*** 51,56 ****
  550. X
  551. X! Frame           frame;
  552. X! Canvas          stage_cvs, msg_cvs;
  553. X! Pixwin         *stage_win, *msg_win;
  554. X! Pixfont        *font;
  555. X
  556. X--- 52,57 ----
  557. X
  558. X! extern Frame    frame;
  559. X! extern Canvas   stage_cvs, msg_cvs;
  560. X! extern Pixwin  *stage_win, *msg_win;
  561. X! extern Pixfont *font;
  562. X
  563. X***************
  564. X*** 67,69 ****
  565. X
  566. X! char            msg0_buf[55];
  567. X
  568. X--- 68,70 ----
  569. X
  570. X! extern char     msg0_buf[55];
  571. X
  572. X***************
  573. X*** 105,109 ****
  574. X  #define INIT_BALLS     3
  575. X! #define LOOP_MAX       100
  576. X
  577. X! #define INIT_SPEED     3.0
  578. X  #define MAX_SPEED      8.0
  579. X--- 106,111 ----
  580. X  #define INIT_BALLS     3
  581. X! #define LOOP_MAX       97    /* prime by wish, not need */
  582. X
  583. X! #define MIN_SPEED      3.0
  584. X! #define INIT_SPEED     4.0
  585. X  #define MAX_SPEED      8.0
  586. X***************
  587. X*** 113,121 ****
  588. X  #define SPEED_RESOLUTION       60    /* SPEED_LIMIT / SPEED_INCR */
  589. X! #define SPEED_RESOLUTION_FACTOR        5.0    /* SPEED_RESOLUTION /
  590. X!                          * SPEED_LIMI
  591. X!                          * 
  592. X!                         /* the stage is a two
  593. X!                          * dimensional array of
  594. X!                          * bricks */
  595. X! struct Brick {
  596. X      char            code;    /* Q.V. map_codes */
  597. X--- 115,120 ----
  598. X  #define SPEED_RESOLUTION       60    /* SPEED_LIMIT / SPEED_INCR */
  599. X! #define SPEED_RESOLUTION_FACTOR        5.0    /* SPEED_RESOLUTION / SPEED_LIMIT */
  600. X!
  601. X! /* the stage is a two dimensional array of bricks */
  602. X! extern struct Brick {
  603. X      char            code;    /* Q.V. map_codes */
  604. X***************
  605. X*** 126,128 ****
  606. X
  607. X! struct Ball {
  608. X      int             quadrant;    /* enumeration { NO_BALL, NE, NW, SW,
  609. X--- 125,127 ----
  610. X
  611. X! extern struct Ball {
  612. X      int             quadrant;    /* enumeration { NO_BALL, NE, NW, SW,
  613. X***************
  614. X*** 129,137 ****
  615. X                       * SE } */
  616. X!     double          angle;    /* range -M_PI_4..NEAR_HORIZONTAL */
  617. X!     /*
  618. X!      * NW -P4|-P4 NE +NH | +NH >>>>>>+<<<<<<  (gap to avoid infinite
  619. X!      * horizontal bounce loops) +NH | +NH SW -P4|-P4 SE
  620. X!      */
  621. X      int             row, col;    /* coordinates on the stage */
  622. X!     double          x, y;    /* coordinates in pixels */
  623. X      double          speed, x_speed, y_speed;    /* motion per update in
  624. X--- 128,139 ----
  625. X                       * SE } */
  626. X!     double          angle;        /* range -M_PI_4..NEAR_HORIZONTAL */
  627. X!     /**
  628. X!      ** NW -P4|-P4 NE
  629. X!      **   +NH | +NH
  630. X!      ** >>>>>>+<<<<<<  (gap to avoid infinite horizontal bounce loops)
  631. X!      **   +NH | +NH
  632. X!      ** SW -P4|-P4 SE
  633. X!      **/
  634. X      int             row, col;    /* coordinates on the stage */
  635. X!     double          x, y;        /* coordinates in pixels */
  636. X      double          speed, x_speed, y_speed;    /* motion per update in
  637. X***************
  638. X*** 138,143 ****
  639. X                               * pixels */
  640. X!     /*
  641. X!      * INVARIANT: x_speed == speed * cos( true_angle ) y_speed == speed *
  642. X!      * sin( true_angle )
  643. X!      */
  644. X  }               ball1, ball2, ball3;
  645. X--- 140,146 ----
  646. X                               * pixels */
  647. X!     /**
  648. X!      ** INVARIANT:
  649. X!      **  x_speed == speed * cos( true_angle )
  650. X!      **  y_speed == speed * sin( true_angle )
  651. X!      **/
  652. X  }               ball1, ball2, ball3;
  653. X***************
  654. X*** 144,149 ****
  655. X
  656. X! int             launch_quadrant;/* enumeration { NE, NW } */
  657. X! int             launch_row, launch_col;
  658. X! double          launch_x, launch_y;
  659. X! int             emit_row, emit_col;
  660. X
  661. X--- 147,152 ----
  662. X
  663. X! extern int      launch_quadrant;    /* enumeration { NE, NW } */
  664. X! extern int      launch_row, launch_col;
  665. X! extern double   launch_x, launch_y;
  666. X! extern int      emit_row, emit_col;
  667. X
  668. X***************
  669. X*** 159,166 ****
  670. X
  671. X! int             pallet_lengthI;    /* range MIN_PALLET_LENGTH..MAX_PALLET_LENGTH */
  672. X! int             pallet_heightI;    /* range pallet_lengthI..MAX_PALLET_HEIGHT */
  673. X! int             pallet_xI;    /* range 0..STAGE_WIDTH_IN_PIXELS */
  674. X! int             pallet_yI;    /* range PALLET_MAX_Y+4..PALLET_MIN_Y-12 */
  675. X! int             pallet_row;    /* range MAX_ROW-1..MAX_ROW-9 */
  676. X! double          pallet_length, pallet_height, pallet_x, pallet_y;
  677. X
  678. X--- 162,169 ----
  679. X
  680. X! extern int      pallet_lengthI;    /* range MIN_PALLET_LENGTH..MAX_PALLET_LENGTH */
  681. X! extern int      pallet_heightI;    /* range pallet_lengthI..MAX_PALLET_HEIGHT */
  682. X! extern int      pallet_xI;    /* range 0..STAGE_WIDTH_IN_PIXELS */
  683. X! extern int      pallet_yI;    /* range PALLET_MAX_Y+4..PALLET_MIN_Y-12 */
  684. X! extern int      pallet_row;    /* range MAX_ROW-1..MAX_ROW-9 */
  685. X! extern double   pallet_length, pallet_height, pallet_x, pallet_y;
  686. X
  687. X***************
  688. X*** 173,178 ****
  689. X   */
  690. X! int             mouse_yI;    /* range 0..STAGE_HEIGHT_IN_PIXELS *//* <HC> */
  691. X
  692. X! int             nb_stages, stage_nb, balls_left, score, score_incr, nbricks, loop_nhits, pallet_modif;
  693. X! double          launch_speed;
  694. X
  695. X--- 176,182 ----
  696. X   */
  697. X! extern int      mouse_yI;    /* range 0..STAGE_HEIGHT_IN_PIXELS */    /*<HC>*/
  698. X
  699. X! extern int      nb_stages, stage_nb, balls_left, score, score_incr, nbricks,
  700. X!         loop_nhits, pallet_modif;
  701. X! extern double   launch_speed;
  702. X
  703. X***************
  704. X*** 179,181 ****
  705. X  #define NAME_LENGTH    20
  706. X! char            stage_name[NAME_LENGTH];
  707. X
  708. X--- 183,185 ----
  709. X  #define NAME_LENGTH    20
  710. X! extern char     stage_name[NAME_LENGTH];
  711. X
  712. X***************
  713. X*** 182,188 ****
  714. X  #define MAX_NB_STAGES  100
  715. X! int             stages[MAX_NB_STAGES];
  716. X
  717. X! struct Brick   *last_busted_brick;    /* NULL == none so far */
  718. X! char            last_busted_code;
  719. X! int             last_busted_row, last_busted_col;
  720. X
  721. X--- 186,192 ----
  722. X  #define MAX_NB_STAGES  100
  723. X! extern int      stages[MAX_NB_STAGES];
  724. X
  725. X! extern struct Brick *last_busted_brick;    /* NULL == none so far */
  726. X! extern char     last_busted_code;
  727. X! extern int      last_busted_row, last_busted_col;
  728. X
  729. X***************
  730. X*** 191,194 ****
  731. X
  732. X! Notify_value    move_balls(  );    /* => timeout events */
  733. X! int             move_pallet(  );/* => LOC_MOVE events */
  734. X
  735. X--- 195,198 ----
  736. X
  737. X! extern Notify_value move_balls(  );    /* => timeout events */
  738. X! extern int      move_pallet(  );    /* => LOC_MOVE events */
  739. X
  740. X***************
  741. X*** 197,199 ****
  742. X
  743. X! struct itimerval timeout;
  744. X
  745. X--- 201,203 ----
  746. X
  747. X! extern struct itimerval timeout;
  748. X
  749. X***************
  750. X*** 204,206 ****
  751. X      (void) notify_set_itimer_func( frame, move_balls, \
  752. X!     ITIMER_REAL, &timeout, ITIMER_NULL )
  753. X  #define stop_timer()   \
  754. X--- 208,210 ----
  755. X      (void) notify_set_itimer_func( frame, move_balls, \
  756. X!                        ITIMER_REAL, &timeout, ITIMER_NULL )
  757. X  #define stop_timer()   \
  758. X***************
  759. X*** 207,209 ****
  760. X      (void) notify_set_itimer_func( frame, move_balls, \
  761. X!     ITIMER_REAL, ITIMER_NULL, ITIMER_NULL )
  762. X
  763. X--- 211,213 ----
  764. X      (void) notify_set_itimer_func( frame, move_balls, \
  765. X!                        ITIMER_REAL, ITIMER_NULL, ITIMER_NULL )
  766. X
  767. X***************
  768. X*** 214,217 ****
  769. X
  770. X! char    *login;
  771. X! char    playground[PATH_LENGTH];
  772. X
  773. X--- 218,221 ----
  774. X
  775. X! extern char    *login;
  776. X! extern char     playground[PATH_LENGTH];
  777. X
  778. X*** blockbuster.man.orig    Thu Aug 23 14:56:16 1990
  779. X--- blockbuster.man    Thu Aug 23 14:56:43 1990
  780. X***************
  781. X*** 6,8 ****
  782. X  .B blockbuster
  783. X! .I [play_ground]
  784. X  .I [sunview_options]
  785. X--- 6,8 ----
  786. X  .B blockbuster
  787. X! .I [playground]
  788. X  .I [sunview_options]
  789. X***************
  790. X*** 9,14 ****
  791. X  .SH DESCRIPTION
  792. X! The play ground is either the anonymous public play ground (no argument),
  793. X  a named public playground or a privately owned directory.
  794. X! The list of available named public play grounds is obtained by giving "-"
  795. X! as the play ground argument.
  796. X  .LP
  797. X--- 9,14 ----
  798. X  .SH DESCRIPTION
  799. X! The playground is either the anonymous public playground (no argument),
  800. X  a named public playground or a privately owned directory.
  801. X! The list of available named public playgrounds is obtained by giving "-"
  802. X! as the playground argument.
  803. X  .LP
  804. X***************
  805. X*** 89,91 ****
  806. X  .SH "CREATION OF PLAY GROUNDS"
  807. X! A private play ground can be created in any directory.
  808. X  The stages can be defined from the ascii map codes using any text editor
  809. X--- 89,91 ----
  810. X  .SH "CREATION OF PLAY GROUNDS"
  811. X! A private playground can be created in any directory.
  812. X  The stages can be defined from the ascii map codes using any text editor
  813. X***************
  814. X*** 96,98 ****
  815. X  .LP
  816. X! Individual stages can be tried in the public play ground "try" (q.v. 'try'),
  817. X  provided you have write access.
  818. X--- 96,98 ----
  819. X  .LP
  820. X! Individual stages can be tried in the public playground "try" (q.v. 'try'),
  821. X  provided you have write access.
  822. X***************
  823. X*** 183,189 ****
  824. X  .SH FILES
  825. X! {BBexe}/blockbuster.*.exe\h'|30m'executables (per architecture)
  826. X! {BBexe}/stagemm.exe\h'|30m'[optional] bookkeeping program (q.v. 'smm')
  827. X  {BBstg}/stage.skel\h'|30m'skeleton stage (q.v. 'tes')
  828. X! {BBstg}/STAGES.\h'|30m'anonymous public play ground
  829. X! {BBstg}/STAGES.*\h'|30m'named public play grounds
  830. X  \h'|30m'(including a try out environment) (q.v. 'try')
  831. X--- 183,189 ----
  832. X  .SH FILES
  833. X! {BBexe}/blockbuster\h'|30m'executable (to be installed)
  834. X! {BBexe}/stagemm\h'|30m'[optional] bookkeeping program (q.v. 'smm')
  835. X  {BBstg}/stage.skel\h'|30m'skeleton stage (q.v. 'tes')
  836. X! {BBstg}/STAGES.\h'|30m'anonymous public playground
  837. X! {BBstg}/STAGES.*\h'|30m'named public playgrounds
  838. X  \h'|30m'(including a try out environment) (q.v. 'try')
  839. X***************
  840. X*** 190,192 ****
  841. X  .SH "USEFUL AUXILIARY SHELLSCRIPTS"
  842. X- \&'blockbuster'
  843. X  \&'smm'\h'|6m'stage mini-max (small bookkeeping program)
  844. X--- 190,191 ----
  845. X***************
  846. X*** 193,195 ****
  847. X  \&'tes'\h'|6m'tuned textedit
  848. X! \&'try'\h'|6m'try out any individual stage in any play ground
  849. X  \h'|6m'(using {BBstg}/STAGES.try)
  850. X--- 192,194 ----
  851. X  \&'tes'\h'|6m'tuned textedit
  852. X! \&'try'\h'|6m'try out any individual stage in any playground
  853. X  \h'|6m'(using {BBstg}/STAGES.try)
  854. X*** deflection.c.orig    Thu Aug 23 14:56:17 1990
  855. X--- deflection.c    Thu Aug 23 14:56:44 1990
  856. X***************
  857. X*** 73,75 ****
  858. X          ball->quadrant = ( ball->quadrant == SW ) ? NW
  859. X!              /* SE */ : NE;
  860. X      else {            /* rebound */
  861. X--- 73,75 ----
  862. X          ball->quadrant = ( ball->quadrant == SW ) ? NW
  863. X!                          /* SE */ : NE;
  864. X      else {            /* rebound */
  865. X***************
  866. X*** 77,79 ****
  867. X          ball->quadrant = ( ball->quadrant == SW ) ? NE
  868. X!              /* SE */ : NW;
  869. X      };
  870. X--- 77,79 ----
  871. X          ball->quadrant = ( ball->quadrant == SW ) ? NE
  872. X!                          /* SE */ : NW;
  873. X      };
  874. X***************
  875. X*** 88,90 ****
  876. X      true_angle = ( ball->quadrant == NE ) ? M_PI_4 - ball->angle
  877. X!          /* NW */ : M_PI_3_4 + ball->angle;
  878. X      ball->x_speed = ball->speed * cos( true_angle );
  879. X--- 88,90 ----
  880. X      true_angle = ( ball->quadrant == NE ) ? M_PI_4 - ball->angle
  881. X!                      /* NW */ : M_PI_3_4 + ball->angle;
  882. X      ball->x_speed = ball->speed * cos( true_angle );
  883. X***************
  884. X*** 108,110 ****
  885. X                   ball1.angle < -45 || ball1.angle > 45 ||
  886. X!             ball1.x < -pallet_length || ball1.x > pallet_length )
  887. X                  break;
  888. X--- 108,111 ----
  889. X                   ball1.angle < -45 || ball1.angle > 45 ||
  890. X!                  ball1.x < -pallet_length ||
  891. X!                  ball1.x > pallet_length )
  892. X                  break;
  893. X***************
  894. X*** 116,117 ****
  895. X  }
  896. X! #endif DEBUG_PDEFL
  897. X--- 117,118 ----
  898. X  }
  899. X! #endif /* DEBUG_PDEFL */
  900. X*** score.c.orig    Thu Aug 23 14:56:18 1990
  901. X--- score.c    Thu Aug 23 14:56:46 1990
  902. X***************
  903. X*** 60,65 ****
  904. X                  if ( score_board[lows].score > score ) {
  905. X!                     /*
  906. X!                      * an older incomplete game: complete
  907. X!                      * it
  908. X!                      */
  909. X                      score_board[lows].balls_left *= -1;
  910. X--- 60,62 ----
  911. X                  if ( score_board[lows].score > score ) {
  912. X!                     /* an older incomplete game */
  913. X                      score_board[lows].balls_left *= -1;
  914. X***************
  915. X*** 107,109 ****
  916. X          if ( score_board[s].balls_left > 99 ) {
  917. X!             msg( s + 2, sprintf( buf, "%7d (%3d)   %8s ",
  918. X                           score_board[s].score,
  919. X--- 104,106 ----
  920. X          if ( score_board[s].balls_left > 99 ) {
  921. X!             msg( s + 2, sprintf( buf, "%10d (%3d)   %8s ",
  922. X                           score_board[s].score,
  923. X***************
  924. X*** 112,114 ****
  925. X          } else if ( score_board[s].balls_left > 9 ) {
  926. X!             msg( s + 2, sprintf( buf, "%7d  (%2d)   %8s ",
  927. X                           score_board[s].score,
  928. X--- 109,111 ----
  929. X          } else if ( score_board[s].balls_left > 9 ) {
  930. X!             msg( s + 2, sprintf( buf, "%10d  (%2d)   %8s ",
  931. X                           score_board[s].score,
  932. X***************
  933. X*** 117,119 ****
  934. X          } else if ( score_board[s].balls_left > 0 ) {
  935. X!             msg( s + 2, sprintf( buf, "%7d   (%1d)   %8s ",
  936. X                           score_board[s].score,
  937. X--- 114,116 ----
  938. X          } else if ( score_board[s].balls_left > 0 ) {
  939. X!             msg( s + 2, sprintf( buf, "%10d   (%1d)   %8s ",
  940. X                           score_board[s].score,
  941. X***************
  942. X*** 122,124 ****
  943. X          } else if ( score_board[s].balls_left < -99 ) {
  944. X!             msg( s + 2, sprintf( buf, "%7d (%3d) + %8s ",
  945. X                           score_board[s].score,
  946. X--- 119,121 ----
  947. X          } else if ( score_board[s].balls_left < -99 ) {
  948. X!             msg( s + 2, sprintf( buf, "%10d (%3d) + %8s ",
  949. X                           score_board[s].score,
  950. X***************
  951. X*** 127,129 ****
  952. X          } else if ( score_board[s].balls_left < -9 ) {
  953. X!             msg( s + 2, sprintf( buf, "%7d  (%2d) + %8s ",
  954. X                           score_board[s].score,
  955. X--- 124,126 ----
  956. X          } else if ( score_board[s].balls_left < -9 ) {
  957. X!             msg( s + 2, sprintf( buf, "%10d  (%2d) + %8s ",
  958. X                           score_board[s].score,
  959. X***************
  960. X*** 132,134 ****
  961. X          } else if ( score_board[s].balls_left < 0 ) {
  962. X!             msg( s + 2, sprintf( buf, "%7d   (%1d) + %8s ",
  963. X                           score_board[s].score,
  964. X--- 129,131 ----
  965. X          } else if ( score_board[s].balls_left < 0 ) {
  966. X!             msg( s + 2, sprintf( buf, "%10d   (%1d) + %8s ",
  967. X                           score_board[s].score,
  968. X***************
  969. X*** 137,139 ****
  970. X          } else {    /* no balls left */
  971. X!             msg( s + 2, sprintf( buf, "%7d         %8s ",
  972. X                           score_board[s].score,
  973. X--- 134,136 ----
  974. X          } else {    /* no balls left */
  975. X!             msg( s + 2, sprintf( buf, "%10d         %8s ",
  976. X                           score_board[s].score,
  977. X***************
  978. X*** 145,156 ****
  979. X          if ( balls_left > 99 ) {
  980. X!             msg( NB_SCORES + 3, sprintf( buf, "%7d (%3d)   %8s ",
  981. X!                            score, balls_left, login ) );
  982. X          } else if ( balls_left > 9 ) {
  983. X!             msg( NB_SCORES + 3, sprintf( buf, "%7d  (%2d)   %8s ",
  984. X!                            score, balls_left, login ) );
  985. X          } else if ( balls_left ) {
  986. X!             msg( NB_SCORES + 3, sprintf( buf, "%7d   (%1d)   %8s ",
  987. X!                            score, balls_left, login ) );
  988. X          } else {    /* no balls left */
  989. X!             msg( NB_SCORES + 3, sprintf( buf, "%7d    <>   %8s ",
  990. X                               score, login ) );
  991. X--- 142,153 ----
  992. X          if ( balls_left > 99 ) {
  993. X!             msg( NB_SCORES + 3, sprintf( buf, "%10d (%3d)   %8s ",
  994. X!                           score, balls_left, login ) );
  995. X          } else if ( balls_left > 9 ) {
  996. X!             msg( NB_SCORES + 3, sprintf( buf, "%10d  (%2d)   %8s ",
  997. X!                           score, balls_left, login ) );
  998. X          } else if ( balls_left ) {
  999. X!             msg( NB_SCORES + 3, sprintf( buf, "%10d   (%1d)   %8s ",
  1000. X!                           score, balls_left, login ) );
  1001. X          } else {    /* no balls left */
  1002. X!             msg( NB_SCORES + 3, sprintf( buf, "%10d    <>   %8s ",
  1003. X                               score, login ) );
  1004. X*** stagemm.c.orig    Fri Aug 24 14:19:00 1990
  1005. X--- stagemm.c    Thu Aug 23 18:04:19 1990
  1006. X***************
  1007. X*** 13,14 ****
  1008. X--- 13,47 ----
  1009. X
  1010. X+ /*** [ANSI] define globals (declared external in blockbuster.h) ***/
  1011. X+ Frame           frame;
  1012. X+ Canvas          stage_cvs, msg_cvs;
  1013. X+ Pixwin         *stage_win, *msg_win;
  1014. X+ Pixfont        *font;
  1015. X+ char            msg0_buf[55];
  1016. X+ struct Brick    stage[MAX_ROW + 1][MAX_COL + 1];
  1017. X+ struct Ball     ball1, ball2, ball3;
  1018. X+ int             launch_quadrant;    /* enumeration { NE, NW } */
  1019. X+ int             launch_row, launch_col;
  1020. X+ double          launch_x, launch_y;
  1021. X+ int             emit_row, emit_col;
  1022. X+ int             pallet_lengthI;    /* range MIN_PALLET_LENGTH..MAX_PALLET_LENGTH */
  1023. X+ int             pallet_heightI;    /* range pallet_lengthI..MAX_PALLET_HEIGHT */
  1024. X+ int             pallet_xI;    /* range 0..STAGE_WIDTH_IN_PIXELS */
  1025. X+ int             pallet_yI;    /* range PALLET_MAX_Y+4..PALLET_MIN_Y-12 */
  1026. X+ int             pallet_row;    /* range MAX_ROW-1..MAX_ROW-9 */
  1027. X+ double          pallet_length, pallet_height, pallet_x, pallet_y;
  1028. X+ int             mouse_yI;    /* range 0..STAGE_HEIGHT_IN_PIXELS */    /*<HC>*/
  1029. X+ int             nb_stages, stage_nb, balls_left, score, score_incr, nbricks,
  1030. X+         loop_nhits, pallet_modif;
  1031. X+ double          launch_speed;
  1032. X+ char            stage_name[NAME_LENGTH];
  1033. X+ int             stages[MAX_NB_STAGES];
  1034. X+ struct Brick   *last_busted_brick;    /* NULL == none so far */
  1035. X+ char            last_busted_code;
  1036. X+ int             last_busted_row, last_busted_col;
  1037. X+ struct itimerval timeout;
  1038. X+ char           *login;
  1039. X+ char            playground[PATH_LENGTH];
  1040. X+ 
  1041. X+ 
  1042. X+ /*** stagemm ***/
  1043. X  void
  1044. END_OF_FILE
  1045. if test 30506 -ne `wc -c <'patches01'`; then
  1046.     echo shar: \"'patches01'\" unpacked with wrong size!
  1047. fi
  1048. # end of 'patches01'
  1049. fi
  1050. echo shar: End of shell archive.
  1051. exit 0
  1052.